#include "pipelib.h"
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main()
{
    // 创建服务器命名管道
    if (mkfifo(SERVER_FIFO, 0666) == -1)
    {
        perror("mkfifo");
        return 1;
    }

    // 打开服务器管道（只读）
    int fd = open(SERVER_FIFO, O_RDONLY);
    if (fd == -1)
    {
        perror("open server_fifo");
        unlink(SERVER_FIFO);
        return 1;
    }

    struct message msg;
    while (1)
    {
        // 读取消息
        ssize_t bytes_read = read(fd, &msg, sizeof(msg));
        if (bytes_read <= 0)
            break; // 客户端关闭或出错

        // 打印接收到的消息
        printf("Received: %s\n", msg.data);

        // 构造客户端管道路径
        char client_fifo[256];
        snprintf(client_fifo, sizeof(client_fifo), CLIENT_FIFO, msg.client_pid);

        // 打开客户端管道（只写）
        int client_fd = open(client_fifo, O_WRONLY);
        if (client_fd == -1)
        {
            perror("open client_fifo");
            continue;
        }

        // 发送响应
        const char *response = "Hello Client!";
        strncpy(msg.data, response, sizeof(msg.data));
        if (write(client_fd, &msg, sizeof(msg)) == -1)
        {
            perror("write");
        }

        close(client_fd);
    }

    close(fd);
    unlink(SERVER_FIFO);
    return 0;
}